# 基本数据类型的CRUD操作
# 一、List列表
# 1.1 增加(Create)
l = [1, 2]
l += [3, 4]
print(l)

x = ["a"]
x[0] = "b"
y1 = [x] * 3
print(y1)

# append 添加
l.append(5)
print(l)

# insert 指定位置插入元素
l.insert(0, 0)
print(l)

# 1.2检索(Retrieve)
List = [1, 2, 3, 4, 5, 6]
print(List[0:3])
# -1为取最后一个值
print(List[-1])
# 间隔取值
print(List[0:5:2])
# index(索引) 返回目标值索引,无结果会报错
List.insert(List.index(2), 8)
print(List)

# 1.3更新(Update)
# 切片赋值

# 1.4 删除(Delete)
# pop 删除末尾元素返回

# remove 删除元素不返回,只删除找到的第一个目标元素

# *1.5 排序和统计
l_5 = ["a", "b", "c", "a"]
print(l_5.count("a"))
# 倒序 reverse在当前列表做倒序, 返回None
l_5.reverse()
print(l_5)

# 倒序 reversed返回一个新列表
l_51 = list(reversed(l_5))
print(l_51)
# sort(排序) 在当前列表做排序, 返回None
l = [4, 1, 2, 5]
l.sort()
print(l)

# sorted(排序) 返回新列表
l = [4, 1, 2, 5]
l2 = list(sorted(l))
print(l2)

# 二、Tuple列表
# 检索
t = (1, 2, 3, 4)
print(t[0:2])
print(t.index(3))

# 三、Dict(字典)
# 增加(Create)
# 键对值赋值
d = {"a": 1}
pass
d["b"] = 2
print(d)

# update 直接添加
d = {'a': 1, 'b': 2}
d1 = {'c': 3, 'd': 4}
d.update(d1)  # 返回为None
print(d)

# setdefault 如果有值,就pass,如果没有值,就设置默认值
d.setdefault("e", 5)
print(d)

# 检索
# 通过键来访问
# get 如果有值,则返回该值,如果没有值,返回默认值
print(d.get("b", 1))

# keys()返回所有key
# value() 返回所有值
# items() 返回元组形势键对值

# 更新(Update)
# 键对值赋值
# update
d.update({"w": 22, "a": 99})
print(d)
# 删除(Delete)
d.pop("a")  # pop删除指定key
print(d)
d.popitem()  # 随机删除元素 *尽量不要用
print(d)
# 清空当前字典
d.clear()
print(d)

# 四、Set(集合)
# 增加 add
s = set()
s.add(1)
s.add(2)
print(s)
# 检索 in 判断当前元素在不在set中
print(1 in s)
# 更新 Update
# set 将y的元素合并到x中,返回None
s.update({2, 3, 4})
print(s)
# union返回两个set的并集,不改变x,y
s2 = {7, 8}
s3 = s.union(s2)
print(s3)
# 删除(Delete)
# remove和discard
s.remove(3)  # 删除元素,没有该元素会报错
print(s)
s.discard(10) # 删除元素,没有该元素不会报错
print(s)
# pop 随机删除一个元素
s.pop()
print(s)


